package com.siyuanren.gcocp.factory;

import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.siyuanren.gcocp.common.config.PublicConfig;
import com.siyuanren.gcocp.dto.WxCourseDTO;
import com.siyuanren.gcocp.entity.WxActive;
import com.siyuanren.gcocp.entity.WxCourse;
import com.siyuanren.gcocp.entity.WxTemplateMsg;
import com.siyuanren.gcocp.entity.WxUser;
import com.siyuanren.gcocp.enumm.CourseTeachType;
import com.siyuanren.gcocp.service.MsgService;
import sun.nio.cs.ext.PCK;

import java.util.Date;

/**
 * Created by   anxing
 * Project_name gcocp-parent
 * Path         com.siyuanren.gcocp.factory
 * Date         2018/6/22
 * Time         13:51
 * Description
 */
public class WxTemplateMsgFac {

    /**
     * 1、报名成功通知：（缴费成功后，收到此通知）
     JMMf0739tE94UPkN5PdI0zJEuyxl3JahjSKPhThgvcg
     {{first.DATA}}
     购买课程：{{keyword1.DATA}}
     报道时间：{{keyword2.DATA}}
     {{remark.DATA}}
     * @return
     */
    public static WxTemplateMsg getPaySuccessMsg(WxCourse course, String enterGroupDate) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_SALE_SUCC);
        msg.setFirst("你好");
        msg.setKeyword1(course.getCourseName());
        if (course.getTeachType() == CourseTeachType.leadTeach.getValue()) {
            msg.setKeyword2(enterGroupDate);
            msg.setRemark(String.format("你已成功报名课程《%s》，请耐心等待%s报到！", course.getCourseName(), enterGroupDate));
        } else {
            msg.setKeyword2(MsgService.NOW_DATE);
            msg.setRemark(String.format("你已成功报名课程《%s》", course.getCourseName()));
        }

        return msg;
    }

    /**
     * 开课入群通知
     * @return
     * {{first.DATA}}
    课程名称：{{keyword1.DATA}}
    时间：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getEnterGroupMsg(WxCourse course, String teacherName) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_STUDY_REMIND);
        msg.setFirst(String.format("助教Riva提醒你\n" +
                "【%s】第1期已开放报到\n" +
                "报到将于今晚12点截止，请尽快报到！\n" +
                "如放弃报到，视为自动放弃引领。\n", course.getCourseName()));
        msg.setKeyword1(course.getCourseName());
        msg.setKeyword2(MsgService.NOW_DATE);
        msg.setRemark("点击【开始学习】进入系统完成报到");
        msg.setColorRemark("#FF0000");
        return msg;
    }

    /**
     * 毕业典礼（课程学习结束第二天）
     * @param
     * @return
     * {{first.DATA}}
    课程名称：{{keyword1.DATA}}
    毕业时间：{{keyword2.DATA}}
    学员姓名：{{keyword3.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getGradMsg(WxCourse course, String gradTime, String userName) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_CERT_SEND);
        msg.setFirst(String.format("助教Riva提醒你，\n" +
                "今天【%s】毕业典礼开放。\n" +
                "请及时进入系统打印毕业证书。\n",course.getCourseName()));
        msg.setKeyword1(course.getCourseName());
        msg.setKeyword2(gradTime);
        msg.setKeyword3(userName);
        msg.setRemark("点击下方【开始学习】进入系统参加毕业典礼");
        msg.setColorRemark("#FF0000");
        return msg;
    }

    /**
     *  领取毕业福利（送毕业福利时间：毕业典礼当天下午7：00）
     * @return
     *
     * {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getGradVoucherMsg(WxUser user) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_SERVER_REMIND);
        msg.setFirst("你好 " + user.getNickname());
        msg.setKeyword1("毕业福利已发送");
        msg.setKeyword2("送毕业福利");
        msg.setRemark("你的【毕业福利】已发送，\n" +
                "可以发送该优惠券给好友优惠报名\n");
        return msg;
    }

    /**
     *  好友领取优惠券通知（好友扫码领取即可收到通知）
     * @return
     *
     * {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getFriendReceiveVoucherMsg(WxUser user, String sponsorName) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_SERVER_REMIND);
        msg.setFirst(String.format("你好 %s 你的好友【%s】已成功领取你赠送的课程优惠券",sponsorName, user.getNickname()));
        msg.setKeyword1("好友领取优惠券通知");
        msg.setKeyword2("已领取");
        return msg;
    }

    /**
     *  好友优惠券使用通知（好友领取优惠券并报名后通知）
     * @return
     *
     * {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getFriendUseVoucherMsg(WxUser user, WxCourse course, String friendName) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_SERVER_REMIND);
        msg.setFirst(String.format("你好 %s 你的好友%s已经使用你的邀请卡报名【%s】"
                ,user.getNickname(), friendName, course.getCourseName()));
        msg.setKeyword1("好友使用优惠券通知");
        msg.setKeyword2("已使用");
        return msg;
    }
    /**
     *  10、活动提醒（首次活动发布，在学员学习的第二天下午7：00，未执行任务学员，在接下去的第三天、第四天、第五天都会收到任务提醒，直到执行了任务为止）
     * @return
     *
     * {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getActiveRemindMsg(String courseName, WxActive active) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_SERVER_REMIND);
        msg.setFirst("助教Riva提醒你，\n" +
                "你有一份【"+courseName + "】待领取\n" +
                "数量有限，领完即止\n");
        msg.setKeyword1("活动提醒");
        msg.setKeyword2("【"+courseName + "】待领取");
        msg.setRemark("点击详情前往领取");
        msg.setColorRemark("#FF0000");
        String url = Base64.encode("/#/activity?activeId=" + active.getId());
        msg.setUrl(PublicConfig.TOMCAT_URL + "authAndGo?actualUrl=" + url);
        return msg;
    }
    /**
     *  10、活动提醒 最后一天
     * @return
     *
     * {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getActiveLastdayRemindMsg(WxActive active, String courseName) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_SERVER_REMIND);
        msg.setFirst("助教Riva提醒你，\n" +
                "你有一份【"+courseName + "】待领取\n" +
                "仅剩一天! 错过就没有机会获得啦\n");
        msg.setKeyword1("活动提醒");
        msg.setKeyword2("截止至" + DateUtil.format(active.getActiveEndDate(), "yyyy年MM月dd日 HH:mm"));
        msg.setRemark("点击详情前往领取");
        msg.setColorRemark("#FF0000");
        String url = Base64.encode("/#/activity?activeId=" + active.getId());
        msg.setUrl(PublicConfig.TOMCAT_URL + "authAndGo?actualUrl=" + url);
        return msg;
    }
    /**
     *  10、活动提醒 最后4小时
     * @return
     *
     * {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getActiveLast4HourRemindMsg(WxActive active, String courseName) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_SERVER_REMIND);
        msg.setFirst("助教Riva提醒你，\n" +
                "你有一份【"+courseName + "】待领取\n" +
                "距离活动截止还剩4小时! 错过就没有机会获得啦\n");
        msg.setKeyword1("活动提醒");
        msg.setKeyword2("截止至" + DateUtil.format(active.getActiveEndDate(), "yyyy年MM月dd日 HH:mm"));
        msg.setRemark("点击详情前往领取");
        msg.setColorRemark("#FF0000");
        String url = Base64.encode("/#/activity?activeId=" + active.getId());
        msg.setUrl(PublicConfig.TOMCAT_URL + "authAndGo?actualUrl=" + url);
        return msg;
    }


    /**
     *  13、活动开始通知（活动完成后，收到礼物等待领取通知）
     * @return
     *
     *
    EIJotT_VsjUeU8hQPW315D7C-uQtm1Gtffqp9QYmpW0
    {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getActiveStartMsg(WxActive active) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_SERVER_REMIND);
        msg.setFirst(String.format("你已经申请了“思源心课堂”邀请好友活动，完成课程邀请好友任务即可获得%s。\n" +
                "请将活动主页邀请卡保存后发送给好友。\n" +
                "点击详情前往活动首页保存邀请卡", active.getSponsorVoucherTitle()));
        msg.setKeyword1(active.getSponsorVoucherTitle());
        msg.setKeyword2("报名通知");
        msg.setRemark("点击详情前往报名");
        msg.setColorRemark("#FF0000");

        String url = Base64.encode("/#/activity?activeId=" + active.getId());
        msg.setUrl(PublicConfig.TOMCAT_URL + "authAndGo?actualUrl=" + url);
        return msg;

    }

    /**
     *  13、活动进度通知（活动完成后，收到礼物等待领取通知）
     * @return
     *
     *
    EIJotT_VsjUeU8hQPW315D7C-uQtm1Gtffqp9QYmpW0
    {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getActiveProgressMsg(WxActive active, String friendName, int needFriendCount, String courseName) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);

        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_SERVER_REMIND);
        if (needFriendCount > 0) {
            msg.setFirst(String.format("你的好友%s已经使用你的邀请卡报名课程【%s】\n" +
                    "你还需邀请%s人即可获得%s", friendName, courseName, needFriendCount, active.getSponsorVoucherTitle()));
        } else {
            msg.setFirst(String.format("你的好友%s已经使用你的邀请卡报名课程【%s】\n",
                    friendName, courseName, needFriendCount, active.getSponsorVoucherTitle()));
        }
        msg.setKeyword1(active.getSponsorVoucherTitle());
        msg.setKeyword2("好友报名通知");
        msg.setRemark("详情");
        msg.setColorRemark("#FF0000");
        String url = Base64.encode("/#/activity?activeId=" + active.getId());
        msg.setUrl(PublicConfig.TOMCAT_URL + "authAndGo?actualUrl=" + url);
        return msg;
    }

    /**
     *  13、活动完成通知，收到礼物等待领取通知
     * @return
     *
     *
     *   EIJotT_VsjUeU8hQPW315D7C-uQtm1Gtffqp9QYmpW0
    {{first.DATA}}
    服务名称：{{keyword1.DATA}}
    服务进度：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getActiveCompleteMsg(WxActive active, String friendName, String courseName) {
        WxTemplateMsg msg = new WxTemplateMsg();
        WxTemplateMsgFac.initColor(msg);
        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_SERVER_REMIND);
        msg.setFirst(String.format("你的好友%s已经使用你的邀请卡报名课程【%s】。\n" +
                "你已经完成邀请，%s马上推送给您，请查收使用。\n" +
                "领取优惠券后，还可以邀请好友报名哦。", friendName, courseName, active.getSponsorVoucherTitle()));
        msg.setKeyword1(active.getSponsorVoucherTitle()+"领取");
        msg.setKeyword2("礼物领取通知");
        msg.setRemark("详情");
        msg.setColorRemark("#FF0000");
        String url = Base64.encode("/#/activity?activeId=" + active.getId());
        msg.setUrl(PublicConfig.TOMCAT_URL + "authAndGo?actualUrl=" + url);
        return msg;

    }


    /**
     * 上课提醒（课程每天早上7：00提醒）
     * @return
     * {{first.DATA}}
    课程名称：{{keyword1.DATA}}
    时间：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getStudyMorningRemindMsg(String courseName) {
        WxTemplateMsg msg = new WxTemplateMsg();
        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_STUDY_REMIND);
        msg.setFirst("你订阅的课程今天内容已更新，请及时完成");
        msg.setKeyword1(courseName);
        msg.setKeyword2(DateUtil.formatDate(new Date()));
        msg.setRemark("点击【开始学习】进入系统学习");
        msg.setColorRemark("0xff0000");
        return msg;
    }
    /**
     * 上课提醒（课程每天晚上7：00提醒）
     * @return
     * {{first.DATA}}
    课程名称：{{keyword1.DATA}}
    时间：{{keyword2.DATA}}
    {{remark.DATA}}
     */
    public static WxTemplateMsg getStudyEventingRemindMsg(String courseName) {
        WxTemplateMsg msg = new WxTemplateMsg();
        msg.setTemplateId(PublicConfig.PUBLIC_WX_TEMPLATE_STUDY_REMIND);
        msg.setFirst("你今天订阅的学习任务还没有完成，请及时完成哦");
        msg.setKeyword1(courseName);
        msg.setKeyword2(DateUtil.formatDate(new Date()));
        msg.setRemark("点击【开始学习】进入系统学习");
        msg.setColorRemark("0xff0000");
        return msg;
    }

    private static void initColor(WxTemplateMsg msg) {
        msg.setColorFirst("#2a75ed");
        msg.setColor1("#2a75ed");
        msg.setColor2("#2a75ed");
        msg.setColor3("#2a75ed");
        msg.setColor4("#2a75ed");
        msg.setColorRemark("#2a75ed");
    }
}
